
package model;

import controle.GerenciadorArquivos;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

/**
 *
 * @author Marcos Vinicius Rogowski
 *
 */
public class PessoaFisicaDAO implements OperacoesDAO{
	private HashMap<String, PessoaFisica> pf = new HashMap();
    private static PessoaFisicaDAO instancia = null;
    
    public static PessoaFisicaDAO newInstance(){
        if (instancia == null){
            instancia = new PessoaFisicaDAO();
        }
        return instancia;
    }

    private PessoaFisicaDAO() {
        if (pf.isEmpty()) {
            Object obj = GerenciadorArquivos.lerDados("pf.dat");
            if (obj instanceof HashMap) {
                pf = (HashMap) obj;
            }
        }
    }

    /*
     * @param obj é o Usuário que será inserido no mapa
     */
    @Override
    public void inserir(Object obj) {
        if (obj instanceof PessoaFisica) {
            PessoaFisica func = (PessoaFisica) obj;
            String chave = func.getRg();
            pf.put(chave, func);
        }
    }

    /*
     * @param obj é a chave de loalização
     */
    @Override
    public boolean excluir(Object obj) {
        if (obj instanceof String) {
            String chave = (String) obj;
            PessoaFisica func = pf.remove(chave);
            if (func != null) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void editar(Object obj) {
        if (obj instanceof PessoaFisica) {
            PessoaFisica novo = (PessoaFisica) obj; // Com os dados a serem alterados
            String chave = novo.getRg();
            pf.put(chave, novo);
        }
    }


    @Override
    public ArrayList pequisar() {
        Collection<PessoaFisica> lista = pf.values();
        ArrayList retorno = new ArrayList(lista);
        return retorno;
    }

    public PessoaFisica pesquisar(String chave) {
        PessoaFisica func = pf.get(chave);
        return func;
        // Se não encontrar a chave retorna null;
    }

    
    public void finalizar(){
        GerenciadorArquivos.gravarDados("pf.dat", pf);
    }	
}
